import java.util.Arrays;
import java.util.Scanner;

class OuterClass2 {
    public int data1 = 1;
    int data2 = 2;
    public static int data3 = 3;

    public void test() {
        System.out.println("out::test()");
    }

    /**
     * 1.如何获取静态内部类对象？
     * 2.静态内部类当中，不能访问外部类的非静态成员。
     * ————外部类的非静态成员，需要通过外部类的对象的引用才能访问。
     * 如果非要访问就是直接通过外部对象来访问
     */

    static class InnerClass2 {
        public int data4 = 4;
        int data5 = 5;
        public static int data6 = 6;

        public void func() {
            System.out.println("int::func()");
        }
    }
}

class Person {
    String name = "zhang";
    int age = 19;

    //当我们自己实现了之后，编译器会调用自己写的toString

    @Override//检查写的对不对
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

public class Test3 {

    public static void main1(String[] args) {
        /*OuterClass outerClass = new OuterClass();

        OuterClass.InnerClass innerClass = outerClass.new InnerClass();
         */

        //不需要实例化外部对象 -- 将静态内部类当做静态成员
        OuterClass2.InnerClass2 innerClass2 = new OuterClass2.InnerClass2();

    }

    public void func() {
        //局部内部类是将类定义在方法里面 -- 有很大缺陷
        //只能在当前方法里面实例化对象

        class Inner {
            public void test() {
                System.out.println("func::calss Inner");
            }
        }

        //只能在该方法体内使用内部类 -- 不能被public、static 来修饰（几乎不使用）
        Inner inner = new Inner();
        inner.test();

    }

    public static void main2(String[] args) {
        new OuterClass2();//匿名对象 -- 只能用一次 （每次用的时候都得重新去new）

        //匿名内部类
        new Person() {

        };
        //学完接口讲解
    }

    public static void main(String[] args) {
        Person person = new Person();
        System.out.println(person);

        int[][] array = new int[][]{{1, 2, 3, 4}, {5, 6, 7, 8}};

        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j] + " ");
            }

            System.out.println();
        }

        System.out.println();

        for (int[] arr : array) {
            for (int e : arr) {
                System.out.print(e + " ");
            }
            System.out.println();
        }

        System.out.println();

        System.out.println(Arrays.deepToString(array));
    }
}

